/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：CommandCopy.js<br>
 * 日期：2016年9月29日<br>
 * 作者: 王志远<br>
 * 功能：复制命令<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 类型名称：Rainier.UI.V2.CommandCopy<br>
 * 类型功能：复制命令<br>
 */
Rainier.UI.V2.CommandCopy = draw2d.command.Command.extend({
	
	NAME : "Rainier.UI.V2.CommandCopy",
	
	/**
	 * 函数名称：Rainier.UI.V2.CommandCopy.init<br>
	 * 函数功能：构造函数<br>
	 * 异常信息：无<br>
	 */
	init : function(context,editParts){
		this.context 		= context;
		this.editParts 		= editParts;
				
    	this.rootEditPart 	= this.context.getRootEditPart();
    	this.rootFigure   	= this.context.getRootFigure();
    	this.rootModel    	= this.context.getRootModel();
    	
    	this.modelList 		= new draw2d.util.ArrayList();
		
    	this.getModelsCopy(editParts);
		this._super();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.CommandCopy.copy<br>
	 * 函数功能：对连线进行特殊处理，所有连接端口重置为其副本<br>
	 * 参数输入：editParts ：Rainier.UI.V2.AbstractEditPart数组<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getModelsCopy : function(editParts){
		var _this = this;
		editParts.each(function(j,editPart){
			var model    = editPart.getModel().clone();			
			_this.modelList.add(model);
		})
		editParts.each(function(j,editPart){
			editPart.getModel().clearDuplicate();
		})
	},
	
    /**
	 * 函数名称：Rainier.UI.V2.CommandCopy.canExecute<br>
	 * 函数功能：是否能够执行命令<br>
	 * 函数返回：Boolean<br>
	 * 异常信息：无<br>
	 */
    canExecute:function(){
    	var canExecute = 1;
    	this.editParts.each(function(j,editPart){
    		if(!editPart.getFigure().getCanvas()){
    			canExecute = 0;
    		}
    	});
        return canExecute !== 0;
    },
    
    /**
	 * 函数名称：Rainier.UI.V2.CommandCopy.execute<br>
	 * 函数功能：执行命令<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    execute:function(){
    	var modelList = [];
    	this.modelList.each(function(index,model){
    		if(modelList.indexOf(model)==-1){
    			modelList.push(model);
    		}
    	});
    	this.modelList.data = modelList;
    	this.modelList.each(function(index,model){
    		model.property.imageProperty.svg = model.property.uiProperty.imageString;
    	});
    	this.context.copyModelList = this.modelList;
    },
    
    /**
	 * 函数名称：Rainier.UI.V2.CommandCopy.undo<br>
	 * 函数功能：撤销命令<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    undo:function(){
    	//sessionStorage.removeItem('selectedModelList');
    	this.context.copyModelList.clear();
    },
    
    /**
	 * 函数名称：Rainier.UI.V2.CommandCopy.redo<br>
	 * 函数功能：重做命令<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    redo:function(){
    	this.execute();
    }

});